import { Translation } from 'react-i18next'
import { show } from './show'
import type { DialogAlertProps } from './type'

/**
 * @description - 推荐
 * @description - 可以通过调用 Dialog 上的 `alert` 方法直接打开对话框
 * @description - alert 接受的参数同 show，但不支持 `visible`、`closeOnAction`、`actions`、`forceRender`、`destroyOnClose` 属性
 * @description - 点击操作按钮后会触发`onClose`（closeOnActio - default: `true`）
 * @description - 当对话框被关闭后，组件实例自动销毁
 * @description - 它的返回值不是一个控制器对象，而是 `Promise<void>`
 */
export const alert = (props: DialogAlertProps): Promise<void> => {
  const {
    confirmText = (
      <Translation>
        {(t) => <>{t('common.gallery.Dialog.confirmText')}</>}
      </Translation>
    ),
    onConfirm,
    onClose,
    disabled,
  } = props

  return new Promise<void>((resolve) => {
    show({
      ...props,
      closeOnAction: true,
      actions: [
        {
          key: 'confirm',
          text: confirmText,
          disabled,
        },
      ],
      onAction: onConfirm,
      onClose: () => {
        onClose?.()
        resolve()
      },
    })
  })
}
